# 计算n个人中任意两个人的生日在同一天的概率大于 50%

# 在n个人中, 如果房间里只有1个人, 那么所有人生日都不相同的概率为 1
# 如果房间里有两个人, 那么所有人生日都不相同的概率为: (365 / 365) * (364 / 365)
# 如果房间里有三个人, 那么所有人生日都不相同的概率为: (365 / 365) * (364 / 365) * (363 / 365)
# 因此: 房间里有n个人时, 所有人生日都不相同的概率为: (365 / 365) * (364 / 365) * (363 / 365) * ... * ((365 - (n - 1)) / 365)
# 那么: 房间里有n个人时, 至少有两个人生日相同的概率为:
# 1 - [(365 / 365) * (364 / 365) * (363 / 365) * ... * ((365 - (n - 1)) / 365)]

# 下面的代码将演示这一点

import matplotlib.pyplot as plt


if __name__ == '__main__':
    prob = 1.0
    n = 1.0

    while (1.0 - prob) < 0.5:
        n += 1.0
        prob = prob * ((366.0 - n) / 365.0)

    print('n = %d, %f%% > 50%%' % (n, (1.0 - prob) * 100))

    # 开始作图
    n = 1.0
    prob = 1.0
    trace_list = []

    while n < 50:
        trace_list.append((1.0 - prob, n))
        n += 1.0
        prob = prob * ((366.0 - n) / 365.0)

    plt.rcParams['axes.unicode_minus'] = False

    #plt.xlabel('人数')
    #plt.ylabel('概率')

    x = []
    y = []
    for i in range(0, len(trace_list)):
        y.append(trace_list[i][0])
        x.append(trace_list[i][1])

    plt.plot(x, y, '.')
    plt.show()
